O Paradoxo do Desempenho afirma que um kernel matematicamente perfeito, como $out = x + y$, pode realmente se comportar pior que um loop no CPU se não conseguir amortizar os custos fixos do hardware da GPU. Isso frequentemente se manifesta como o Imposto de Inicialização.
1. O Falácia da "Correção"
A correção funcional não é um indicador de eficiência. Embora seu código Triton possa distribuir corretamente o trabalho entre milhares de threads, se a quantidade total de trabalho (N) for pequena, a GPU permanecerá subutilizada. O hardware gasta mais tempo em transições de estado do que em operações aritméticas reais.
2. A Armadilha da Medição em Python
Medir o desempenho de código GPU em Python usando time.time() é perigoso. Chamadas GPU são assíncronas; o Python simplesmente coloca na fila o comando e segue em frente. Sem torch.cuda.synchronize(), você mede o tempo de fila. Com sincronização, você mede a latência Host-to-Device, que geralmente é 10 vezes maior que a própria execução do kernel.
3. Latência vs. Throughput
Para superar o paradoxo, você deve fornecer trabalho suficiente para "esconder" a latência de inicialização. Este é o processo de transição de um regime limitado por latência regime (limitado pela barramento CPU-GPU) para um regime limitado por throughput regime (limitado pela memória ou computação da GPU).